﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BUS;
using DTO;

namespace QLCHHoaLan
{
    public partial class FrmBanHang : Form
    {
        //Khai báo List chứa danh sách các chi tiết hóa đơn
        public List<ChiTietHoaDonDTO> lst = new List<ChiTietHoaDonDTO>();
        public BanHangDTO bhDTO = new BanHangDTO(); //Dùng cho nút tính tiền
        public int tienTrangTri; //Dùng cho nút tính tiền


        public FrmBanHang()
        {
            InitializeComponent();
        }
        private void TimKiemTuCombobox()
        {
            KhachHangBUS khBus = new KhachHangBUS();
            cbbTenKH.AutoCompleteMode = AutoCompleteMode.Suggest;
            cbbTenKH.AutoCompleteSource = AutoCompleteSource.ListItems;
            cbbTenKH.DataSource = khBus.LayDanhSachKhachHang();
            cbbTenKH.DisplayMember = "TenKH";
            cbbTenKH.ValueMember = "MaKH";
        }

        private void FrmBanHang_Load(object sender, EventArgs e)
        {
            TimKiemTuCombobox();
            txtNgayDat.Text = DateTime.Now.ToShortDateString();

            //Xu Ly DataGridview
            DataGridViewTextBoxColumn stt = new DataGridViewTextBoxColumn();
            stt.HeaderText = "STT";
            stt.DataPropertyName = "STT";
            dgvDatHang.Columns.Add(stt);


            //Tạo combobox tên mặt hàng trong datagridview
            DataGridViewComboBoxColumn cbbTenMatHang = new DataGridViewComboBoxColumn();
            HoaBUS hoaBUS = new HoaBUS();

            cbbTenMatHang.DataSource = hoaBUS.LoadHoa();
            cbbTenMatHang.DisplayMember = "TenHoa";
            cbbTenMatHang.ValueMember = "MaHoa";
            cbbTenMatHang.DataPropertyName = "TenMatHang";
            cbbTenMatHang.HeaderText = "Tên Mặt Hàng";
            dgvDatHang.Columns.Add(cbbTenMatHang);

            //Tạo combobox Đơn vị tính trong datagridview
            DataGridViewComboBoxColumn cbbDonViTinh = new DataGridViewComboBoxColumn();
            LoaiHoaBUS loaihoa = new LoaiHoaBUS();
            cbbDonViTinh.DataSource = loaihoa.LayDSLoaiHoa();
            cbbDonViTinh.DisplayMember = "TenLoai";
            cbbDonViTinh.ValueMember = "MaLoai";
            cbbDonViTinh.DataPropertyName = "DonViTinh";
            cbbDonViTinh.HeaderText = "Đơn Vị Tính";
            dgvDatHang.Columns.Add(cbbDonViTinh);

            //Tạo textbox Số Lượng
            DataGridViewTextBoxColumn soLuong = new DataGridViewTextBoxColumn();
            soLuong.HeaderText = "Số Lượng";
            soLuong.DataPropertyName = "SoLuong";
            dgvDatHang.Columns.Add(soLuong);

            //Tạo textbox Đơn Giá
            DataGridViewTextBoxColumn donGia = new DataGridViewTextBoxColumn();
            donGia.HeaderText = "Đơn Giá";
            donGia.DataPropertyName = "DonGia";
            dgvDatHang.Columns.Add(donGia);

            //Tạo textbox Thành Tiền
            DataGridViewTextBoxColumn thanhTien = new DataGridViewTextBoxColumn();
            thanhTien.HeaderText = "Thành Tiền";
            thanhTien.DataPropertyName = "ThanhTien";
            dgvDatHang.Columns.Add(thanhTien);

            //Chỉnh kích thước các cột trong Datagridview
            dgvDatHang.Columns[0].Width = 60;
            dgvDatHang.Columns[0].ReadOnly = true;
            dgvDatHang.Columns[1].Width = 200;
            dgvDatHang.Columns[2].Width = 130;
            dgvDatHang.Columns[3].Width = 100;
            dgvDatHang.Columns[4].Width = 150;
            dgvDatHang.Columns[5].Width = 180;
        }

        public int maKH = 0;
        private void cbbTenKH_SelectedIndexChanged(object sender, EventArgs e)
        {
            KhachHangBUS KHBUS = new KhachHangBUS();
            DataTable dt = new DataTable();
            if (cbbTenKH.SelectedIndex == 0)
            {
                maKH = 1;
                dt = KHBUS.TimKhachHang(maKH);
                txtDiaChi.Text = dt.Rows[0]["DiaChi"].ToString();
                txtSDT.Text = dt.Rows[0]["SDT"].ToString();
            }
            else
            {
                maKH = Int32.Parse(cbbTenKH.SelectedValue.ToString());
                dt = KHBUS.TimKhachHang(maKH);
                txtDiaChi.Text = dt.Rows[0]["DiaChi"].ToString();
                txtSDT.Text = dt.Rows[0]["SDT"].ToString();
            }
        }

        public int thanhTien = 0;
        int mahoa, slban, kq;
        private void dgvDatHang_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            BanHangBUS bh = new BanHangBUS();
            if (dgvDatHang.CurrentCell.ColumnIndex == 5)
            {
                dgvDatHang.CurrentRow.Cells[5].ReadOnly = true;
                if (dgvDatHang.CurrentRow.Cells[3].Value != null && dgvDatHang.CurrentRow.Cells[4].Value != null)
                {
                    string tempMH = dgvDatHang.CurrentRow.Cells[1].Value.ToString();
                    mahoa = Int32.Parse(tempMH);
                    string tempSL = dgvDatHang.CurrentRow.Cells[3].Value.ToString();
                    slban = Int32.Parse(tempSL);
                    HoaBUS hoaBUS = new HoaBUS();
                    kq = hoaBUS.LaySoLuongTonHoa(mahoa);
                    if (slban > kq)
                    {
                        MessageBox.Show("Số lượng hoa hiện tại chỉ còn " + kq.ToString() + " Bạn hãy nhấn LÀM MỚI để nhập lại mặt hàng.", "Thông báo",MessageBoxButtons.OK);
                        return;
                    }
                    else
                    {
                        dgvDatHang.CurrentRow.Cells[5].Value = ((Int32.Parse(dgvDatHang.CurrentRow.Cells[3].Value.ToString()) * Int32.Parse(dgvDatHang.CurrentRow.Cells[4].Value.ToString()))).ToString();
                        thanhTien += Int32.Parse(dgvDatHang.CurrentRow.Cells[5].Value.ToString());
                    }
                }
                else
                {
                    MessageBox.Show("Bạn chưa nhập Số Lượng hoặc Đơn Giá!", "Thông Báo");
                    return;
                }
                txtThanhTien.Text = thanhTien.ToString();
            }
        }

        private void radLayNgay_CheckedChanged(object sender, EventArgs e)
        {
            if (radLayNgay.Checked == true)
            {
                txtTenNguoiNhan.ReadOnly = true;
                txtSDTNguoiNhan.ReadOnly = true;
                txtDiaChiGiaoHang.ReadOnly = true;
            }
        }

        private void radChoGiao_CheckedChanged(object sender, EventArgs e)
        {
            if (radChoGiao.Checked == true)
            {
                txtTenNguoiNhan.ReadOnly = false;
                txtSDTNguoiNhan.ReadOnly = false;
                txtDiaChiGiaoHang.ReadOnly = false;
            }
        }

        public static int co = 0;
        private void btnThemKH_Click(object sender, EventArgs e)
        {
            co = 1;
            FrmQuanLyKhachHang frm = new FrmQuanLyKhachHang(co);
            frm.Show();
            this.Close();
        }

        private void dtpNgayGiao_ValueChanged(object sender, EventArgs e)
        {
            if (dtpNgayGiao.Value < Convert.ToDateTime(txtNgayDat.Text))
            {
                MessageBox.Show("Ngày giao không được nhỏ hơn ngày đặt!", "Thông Báo");
                return;
            }
        }

        private void dgvDatHang_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            dgvDatHang.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;
        }

        private void LamMoiFormDatHang()
        {
            cbbTenKH.Text = ""; txtDiaChi.Text = ""; txtSDT.Text = ""; txtTenNguoiNhan.Text = ""; txtSDTNguoiNhan.Text = "";
            txtThanhTien.Text = ""; txtTongTien.Text = ""; txtPhuThu.Text = ""; txtGhiChu.Text = ""; txtTenTrangTri.Text = "";
            txtTienTrangTri.Text = ""; radVAT.Checked = false; radVATKhong.Checked = false; radChuaTT.Checked = false;
            radDaTraDu.Checked = false;
            dgvDatHang.Rows.Clear();
            lst.Clear();
        }

        private void btnLamMoi_Click(object sender, EventArgs e)
        {
            LamMoiFormDatHang();
        }

        int flagTinhTien = 0;
        private void btnTinhTien_Click(object sender, EventArgs e)
        {
            if (flagTinhTien == 1)
            {
                return;
            }
            else
            {
                if (radChoGiao.Checked == true)
                {
                    bhDTO.NguoiNhan = txtTenNguoiNhan.Text;
                    bhDTO.DiaChiGiaoHang = txtDiaChiGiaoHang.Text;
                    bhDTO.SDTNguoiNhan = int.Parse(txtSDTNguoiNhan.Text);
                    bhDTO.TinhTrang = 1;
                }
                else
                {
                    bhDTO.NguoiNhan = cbbTenKH.Text;
                    bhDTO.DiaChiGiaoHang = txtDiaChi.Text;
                    bhDTO.SDTNguoiNhan = Int32.Parse(txtSDT.Text);
                    bhDTO.TinhTrang = 0;
                }
                bhDTO.MaKH = maKH;
                bhDTO.ThoiGianDatHang = Convert.ToDateTime(txtNgayDat.Text);
                bhDTO.ThoiGianGiaohang = dtpNgayGiao.Value;
                if (dgvDatHang.Rows.Count - 1 == 0)
                {
                    MessageBox.Show("Chưa có mặt hàng nào để tính tiền !!!", "Thông báo");
                    return;
                }
                //Thực hiện thêm các chi tiết hóa đơn vào list
                for (int i = 0; i < dgvDatHang.Rows.Count - 1; i++)
                {
                    ChiTietHoaDonDTO cthdDTO = new ChiTietHoaDonDTO();
                    cthdDTO.MaDH = 0;
                    cthdDTO.MaHoa = Int32.Parse(dgvDatHang.Rows[i].Cells[1].Value.ToString());
                    cthdDTO.TenHoa = dgvDatHang.Rows[i].Cells[1].EditedFormattedValue.ToString();
                    cthdDTO.SoLuong = Int32.Parse(dgvDatHang.Rows[i].Cells[3].Value.ToString());
                    cthdDTO.GiaHoa = Int32.Parse(dgvDatHang.Rows[i].Cells[4].Value.ToString());
                    lst.Add(cthdDTO);
                }
                bhDTO.TenTrangTri = txtTenTrangTri.Text;
                bhDTO.GhiChu = txtGhiChu.Text;
                if (txtTienTrangTri.Text == "")
                {
                    tienTrangTri = 0;
                }
                else
                {
                    tienTrangTri = Int32.Parse(txtTienTrangTri.Text);
                }
                if (txtPhuThu.Text == "")
                {
                    bhDTO.PhuThu = 0;
                }
                else
                {
                    bhDTO.PhuThu = Int32.Parse(txtPhuThu.Text);
                }
                thanhTien = thanhTien + tienTrangTri + bhDTO.PhuThu;
                txtThanhTien.Text = thanhTien.ToString();
                if (radVAT.Checked == true)
                {
                    thanhTien = thanhTien + (int)(0.05 * thanhTien);
                }
                bhDTO.TongTien = thanhTien;
                txtTongTien.Text = bhDTO.TongTien.ToString();
                flagTinhTien = 1;
            }
        }

        private void CapNhatSoLuongHoaConLai(int maHoa, int soLuongBan)
        {
            BanHangBUS bhBUS = new BanHangBUS();
            bhBUS.CapNhatSoLuongHoa(mahoa, soLuongBan);
        }
        private void btnLuuTru_Click(object sender, EventArgs e)
        {
                if (dgvDatHang.Rows.Count - 1 == 0)
                {
                    MessageBox.Show("Chưa có mặt hàng nào để lưu trữ !!!", "Thông báo");
                    return;
                }
                if (radDaTraDu.Checked == false && radChuaTT.Checked == false)
                {
                    MessageBox.Show("Bạn chưa chọn thanh toán!!!", "Thông báo");
                    return;
                }
                else
                {
                    if (radDaTraDu.Checked == true)
                    {
                        bhDTO.TinhTrangThanhToan = 0;
                    }
                    else if (radChuaTT.Checked == true)
                    {
                        bhDTO.TinhTrangThanhToan = 1;
                    }
                }
                BanHangBUS bhBUS = new BanHangBUS();
                //Thêm dữ liệu vào bảng đặt hàng          
                bhBUS.ThemDonDatHang(bhDTO);
                int maDH = bhBUS.LayMaDatHang();
                //Thêm lần lượt các CTHD vào bảng Chi tiết hóa đơn
                foreach (ChiTietHoaDonDTO cthd in lst)
                {
                    cthd.MaDH = maDH;
                    bhBUS.ThemChiTietHoaDon(cthd);
                    CapNhatSoLuongHoaConLai(cthd.MaHoa, cthd.SoLuong);
                }
                LamMoiFormDatHang();
                MessageBox.Show("Lưu Trữ Đơn Đặt Hàng Thành Công!", "Thông Báo");
        }
        private void btnInHoaDon_Click(object sender, EventArgs e)
        {
            if (dgvDatHang.Rows.Count - 1 == 0)
            {
                MessageBox.Show("Chưa có mặt hàng nào để lập hóa đơn!!!", "Thông báo");
                return;
            }
            if (radDaTraDu.Checked == false && radChuaTT.Checked == false)
            {
                MessageBox.Show("Bạn chưa chọn thanh toán!!!", "Thông báo");
                return;
            }
            else
            {
                if (radDaTraDu.Checked == true)
                {
                    bhDTO.TinhTrangThanhToan = 0;
                }
                else if (radChuaTT.Checked == true)
                {
                    bhDTO.TinhTrangThanhToan = 1;
                }
            }
            FrmThongTinDatHang frm = new FrmThongTinDatHang();
            frm.bhDTO = bhDTO;
            frm.lstChiTiet = new List<ChiTietHoaDonDTO>();
            foreach (ChiTietHoaDonDTO ct in lst)
            {
                frm.lstChiTiet.Add(ct);
            }
            BanHangBUS bhBUS = new BanHangBUS();
            //Thêm dữ liệu vào bảng đặt hàng          
            bhBUS.ThemDonDatHang(bhDTO);
            int maDH = bhBUS.LayMaDatHang();
            //Thêm lần lượt các CTHD vào bảng Chi tiết hóa đơn
            foreach (ChiTietHoaDonDTO cthd in lst)
            {
                cthd.MaDH = maDH;
                bhBUS.ThemChiTietHoaDon(cthd);
                CapNhatSoLuongHoaConLai(cthd.MaHoa, cthd.SoLuong);
            }
            LamMoiFormDatHang();
            MessageBox.Show("In Đơn Đặt Hàng Thành Công!", "Thông Báo");
            frm.Show();
        }
        private void btnHuy_Click(object sender, EventArgs e)
        {
            Menu main = new Menu();
            main.kq = 1;
            main.Show();
            this.Hide();
            lst.Clear();
        }
    }
}
